package io.github.echarts.model.adapter.series;

import io.github.echarts.model.SeriesModel;
import io.github.echarts.model.context.ConfigurationContext;
import io.github.echarts.option.series.SeriesOption;

import java.util.ArrayList;
import java.util.List;

/**
 * 系列类型适配器注册表
 * <p>
 * 管理所有可用的系列类型适配器，为各类图表提供适配支持。
 * 遵循单例模式设计，确保全局唯一实例。
 * </p>
 */
public class SeriesTypeAdapterRegistry {
    
    private static final SeriesTypeAdapterRegistry INSTANCE = new SeriesTypeAdapterRegistry();
    
    private final List<SeriesTypeAdapter> adapters;
    
    /**
     * 获取注册表实例
     * 
     * @return 注册表实例
     */
    public static SeriesTypeAdapterRegistry getInstance() {
        return INSTANCE;
    }
    
    /**
     * 私有构造函数，初始化并注册默认适配器
     */
    private SeriesTypeAdapterRegistry() {
        adapters = new ArrayList<>();
        registerDefaultAdapters();
    }
    
    /**
     * 注册默认适配器
     */
    private void registerDefaultAdapters() {
        // 使用简化的适配器实现，避免依赖具体实现类
        
        // 注册柱状图适配器
        adapters.add(new AbstractSeriesTypeAdapter("bar") {
            @Override
            public SeriesModel createModel(SeriesOption seriesOption, String coordinateSystemId, ConfigurationContext context) {
                // 简化实现
                return null;
            }
        });
        
        // 注册折线图适配器
        adapters.add(new AbstractSeriesTypeAdapter("line") {
            @Override
            public SeriesModel createModel(SeriesOption seriesOption, String coordinateSystemId, ConfigurationContext context) {
                // 简化实现
                return null;
            }
        });
        
        // 注册饼图适配器
        adapters.add(new AbstractSeriesTypeAdapter("pie") {
            @Override
            public SeriesModel createModel(SeriesOption seriesOption, String coordinateSystemId, ConfigurationContext context) {
                // 简化实现
                return null;
            }
        });
        
        // 可继续添加其他类型适配器
    }
    
    /**
     * 根据系列类型获取对应的适配器
     * 
     * @param seriesType 系列类型
     * @return 适配器实例，若无匹配适配器则返回null
     */
    public SeriesTypeAdapter getAdapter(String seriesType) {
        if (seriesType == null || seriesType.isEmpty()) {
            return null;
        }
        
        for (SeriesTypeAdapter adapter : adapters) {
            if (adapter.supports(seriesType)) {
                return adapter;
            }
        }
        
        return null;
    }
    
    /**
     * 注册新适配器
     * 
     * @param adapter 要注册的适配器
     */
    public void registerAdapter(SeriesTypeAdapter adapter) {
        if (adapter != null) {
            adapters.add(adapter);
        }
    }
    
    /**
     * 移除适配器
     * 
     * @param seriesType 要移除的适配器类型
     */
    public void unregisterAdapter(String seriesType) {
        adapters.removeIf(adapter -> adapter.supports(seriesType));
    }
    
    /**
     * 获取所有已注册适配器
     * 
     * @return 适配器列表
     */
    public List<SeriesTypeAdapter> getAllAdapters() {
        return new ArrayList<>(adapters);
    }
} 